Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 8382d4a08d010a101be69f8dec6e610bd1acea3a


Parents : 5e98407
Author : Mark Qvist <mark@unsigned.io>
Date : 2025-11-21T14:07:43+01:00

Fixed packet buffer FIFO state mismatch on high-bitrate queue processing if raw underlying byte buffer was full

Changes

1 files changed, 5 insertions(+), 6 deletions(-)


Diff

diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino
index 111f171..75fcffb 100644
--- a/RNode_Firmware.ino
+++ b/RNode_Firmware.ino
@@ -575,7 +575,7 @@ volatile bool queue_flushing = false;
void flush_queue(void) {
if (!queue_flushing) {
queue_flushing = true;
- led_tx_on(); uint16_t processed = 0;
+ led_tx_on();
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
while (!fifo16_isempty(&packet_starts)) {
@@ -592,7 +592,7 @@ void flush_queue(void) {
tbuf[i] = packet_queue[pos];
}
- transmit(length); processed++;
+ transmit(length);
}
}
@@ -615,8 +615,7 @@ void flush_queue(void) {
void pop_queue() {
if (!queue_flushing) {
- queue_flushing = true;
- led_tx_on(); uint16_t processed = 0;
+ queue_flushing = true; led_tx_on();
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
if (!fifo16_isempty(&packet_starts)) {
@@ -632,9 +631,9 @@ void pop_queue() {
tbuf[i] = packet_queue[pos];
}
- transmit(length); processed++;
+ transmit(length);
}
- queue_height -= processed;
+ queue_height -= 1;
queued_bytes -= length;
}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────